home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-03-06 | 1.9 KB | 100 lines | [TEXT/PJMM] |
- unit SimpleAddOn;
- interface
-
- function main (info: ptr): ptr;
-
- implementation
-
- type
- IntegerPtr = ^Integer;
- RealHandle = ^RealPtr;
- RealPtr = ^RealArray;
- RealArray = array[1..1] of real;
-
- MPTypePtr = ^MPType;
- MPType = record
- data: Handle;
- mpVarCode: integer;
- width, height: longint;
- max, min: real;
- codeRefNum: integer;
- infoWindow: WindowPtr;
- end;
-
- function main (info: ptr): ptr;
- const
- NewDataWindow = TRUE;
- var
- ok: boolean;
- newData: Handle;
- infoP: MPTypePtr;
-
-
- { • }
-
- procedure DoCalculation;
- var
- x, y, xp: longint;
- mx, mn, num1, num2, ans: real;
- begin
- with infoP^ do
- begin
- mx := -1e20;
- mn := 1e20;
- HLock(data);
- for y := 1 to height - 1 do
- begin
- for x := 1 to width do
- begin
- xp := (y - 1) * width + x;
- num1 := RealHandle(data)^^[xp];
- xp := (y) * width + x;
- num2 := RealHandle(data)^^[xp];
- ans := (num1 - num2);
- RealHandle(newData)^^[xp] := ans;
- if ans > mx then
- mx := ans;
- if ans < mn then
- mn := ans;
- end;
- end;
- for x := 1 to width do
- begin
- RealHandle(newData)^^[x] := 0.0;
- end;
- min := mn;
- max := mx;
- HUnLock(data);
- end; { with }
- end; { Normalize }
-
- { • }
-
- begin
- infoP := MPTypePtr(info);
- ok := TRUE;
-
- if NewDataWindow then
- begin
- newData := NewHandle(infoP^.width * infoP^.height * sizeof(real));
- ok := (MemError = noErr) and (newData <> nil);
- if ok then
- begin
- HLock(newData);
- HLock(infoP^.data);
- BlockMove(infoP^.data^, newData^, infoP^.width * infoP^.height * sizeof(real));
- HUnLock(infoP^.data);
- HUnLock(newData);
- end
- else
- SysBeep(0);
- end;
-
- if ok then
- DoCalculation;
- if NewDataWindow and ok then
- infoP^.data := newData;
- Main := info;
- end; { main }
-
- end. { unit }